<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use App\Utils\QueryUtil;

class CreateTableApiAll extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('common_headers', function (Blueprint $table) {
                $table->id();
                $table->integer('product_id')->default(0)->comment('产品ID products.id'); // 作用域为每个产品
                $table->string('key', 128)->default('')->comment('header名称key'); // admin_tk 直接用在 接口里面
                $table->string('value', 1024)->default('')->comment('header值');// 可取样器{{admin_tk}}  可直接填写
                $table->string('remark', 255)->default('')->comment('header备注');
                $table->string('created_adminer')->default('')->comment('接口创建人 如 马文欢(17614322265)');
                $table->string('updated_adminer')->default('')->comment('接口最后修改人 如 马文欢(17614322265)');
                $table->tinyInteger('enable')->default(1)->comment('上下架状态 1上架 0下架');
                $table->timestamps();

                $table->index('product_id');
                $table->index('key');
        }); QueryUtil::tableComment('common_headers', '产品请求公共头表');

        Schema::create('apis', function (Blueprint $table) {
            $table->id();
            $table->integer('cate_id')->default(0)->comment('项目分类ID project_cates.id');
            $table->integer('project_id')->default(0)->comment('项目ID projects.id');
            $table->integer('product_id')->default(0)->comment('产品ID products.id');
            $table->integer('f_module_id')->default(0)->comment('主模块ID');
            $table->integer('s_module_id')->default(0)->comment('子模块ID');
            $table->integer('host_id')->default(0)->comment('host.id');
            $table->integer('method_type')->default(1)->comment('请求方法类型 1POST 2GET');
            $table->string('name', 64)->default('')->comment('接口名称');
            $table->string('api', 255)->default('')->comment('api');
            $table->string('remark', 255)->default('')->comment('接口说明');
            $table->string('note', 255)->default('')->comment('接口备注');
            $table->string('tags', 255)->default('')->comment('接口标签');
            $table->string('created_adminer')->default('')->comment('接口创建人 如 马文欢(17614322265)');
            $table->string('updated_adminer')->default('')->comment('接口最后修改人 如 马文欢(17614322265)');
            $table->integer('sort')->default(1)->comment('接口排序');
            $table->tinyInteger('enable')->default(1)->comment('上下架状态 1上架 0下架');
            $table->timestamps();

            $table->index('cate_id');
            $table->index('project_id');
            $table->index('product_id');
            $table->index('f_module_id');
            $table->index('s_module_id');
            $table->index('host_id');
            $table->index('name');
        }); QueryUtil::tableComment('apis', '接口表');


        Schema::create('apis_headers', function (Blueprint $table) {
            $table->id();
            $table->integer('api_id')->default(0)->comment('接口.id');
            $table->string('key', 128)->default('')->comment('header名称key'); // admin_tk 直接用在 接口里面
            $table->string('value', 128)->default('')->comment('header值');// 可取样器{{admin_tk}}  可直接填写
            $table->string('created_adminer')->default('')->comment('接口创建人 如 马文欢(17614322265)');
            $table->string('updated_adminer')->default('')->comment('接口最后修改人 如 马文欢(17614322265)');
            $table->timestamps();

            $table->index('api_id');
        }); QueryUtil::tableComment('apis_headers', '接口请求头表');


        Schema::create('apis_param', function (Blueprint $table) {
            $table->id();
            $table->integer('api_id')->default(0)->comment('接口.id');
            $table->json('param')->nullable()->comment('参数值');
            $table->string('created_adminer')->default('')->comment('接口创建人 如 马文欢(17614322265)');
            $table->string('updated_adminer')->default('')->comment('接口最后修改人 如 马文欢(17614322265)');
            $table->timestamps();

            $table->index('api_id');
        }); QueryUtil::tableComment('apis_param', '接口请求参数表');

        Schema::create('apis_validator', function (Blueprint $table) {
            $table->id();
            $table->integer('api_id')->default(0)->comment('接口.id');
            $table->integer('param_id')->default(0)->comment('参数.id');
            $table->string('key')->nullable()->comment('需要验证的返回值 的键');
            $table->string('validator_value')->comment('需要验证的返回值 的值'); // 要等于多少 才算通过
            $table->string('created_adminer')->default('')->comment('接口创建人 如 马文欢(17614322265)');
            $table->string('updated_adminer')->default('')->comment('接口最后修改人 如 马文欢(17614322265)');
            $table->timestamps();

            $table->index('api_id');
        }); QueryUtil::tableComment('apis_validator', '接口返回值验证规则表');

        Schema::create('sample_value', function (Blueprint $table) {
            $table->id();
            $table->integer('api_id')->default(0)->comment('接口.id');
            $table->integer('param_id')->default(0)->comment('参数.id');
            $table->string('sample_key', 128)->default('')->comment('取样key'); // admin_tk
            $table->string('sample_rule', 128)->default('')->comment('取样 规则'); // $data.list.0.id
            $table->string('sample_value', 1024)->default('')->comment('取样 数值');
            $table->tinyInteger('value_type')->default(1)->comment('值的类型 1string 2int');
            $table->string('remark', 255)->default('')->comment('接口备注');
            $table->string('created_adminer')->default('')->comment('接口创建人 如 马文欢(17614322265)');
            $table->string('updated_adminer')->default('')->comment('接口最后修改人 如 马文欢(17614322265)');
            $table->tinyInteger('status')->default(1)->comment('状态 1取样成功 0取样失败');
            $table->timestamps();

            $table->unique(['sample_key']); // 取样器的key 不能重复
            $table->index('api_id');
            $table->index('param_id');
            $table->index('sample_key');
        }); QueryUtil::tableComment('sample_value', '接口结果取样表');
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('table_api_all');
    }
}
